
#include <stdatomic.h>

typedef struct __lock_t { atomic_flag flag; } lock_t;

void init(lock_t *mutex) {
	// 0 -> lock is available, 1 -> held
	// mutex->flag 默认就是 0
}

void lock(lock_t *mutex) 
{	
	// 先看下 flag 是不是 false，
	// 	如果是的话，将 flag 设置为 true，并返回 false
	// 	如果不是的话，也就是 flag 已经是 true 了，那么返回 true
	while (atomic_flag_test_and_set(&mutex->flag)) // TEST the flag
	; // spin-wait (do nothing)
}

void unlock(lock_t *mutex) 
{
	atomic_flag_clear(&mutex->flag);
}

